package com.example.myapplication

import android.content.Context
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import com.example.myapplication.R

class ListFragment : Fragment() {
    // 定义一个接口，用于监听列表项的选择事件
    interface OnItemSelectedListener {
        // 当列表项被选中时调用此方法，并传递选中的项ID
        fun onItemSelected(itemId: Int)
    }

    // 声明一个变量来保存实现了OnItemSelectedListener接口的监听器实例
    private var listener: OnItemSelectedListener? = null

    // 创建Fragment的视图层次结构
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // 使用布局文件fragment_list inflate出Fragment的根视图
        return inflater.inflate(R.layout.fragment_list, container, false)
    }

    // 在Fragment的视图创建完成后调用，用于初始化视图组件
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // 3. --------------------------------
        // 为item1按钮设置点击监听器，当点击时通知监听器选中了ID为1的项
        view.findViewById<Button>(R.id.item1).setOnClickListener {
            listener?.onItemSelected(1)
        }
        // 为item2按钮设置点击监听器，当点击时通知监听器选中了ID为2的项
        view.findViewById<Button>(R.id.item2).setOnClickListener {
            listener?.onItemSelected(2)
        }
    }

    // 2. --------------------------------------
    // 当Fragment与Activity关联时调用
    override fun onAttach(context: Context) {
        super.onAttach(context)
        // 检查Activity是否实现了OnItemSelectedListener接口
        if (context is OnItemSelectedListener) {
            // 如果实现了，则将listener设置为该Activity的实例
            listener = context
        } else {
            // 如果没有实现，则抛出运行时异常提示必须实现OnItemSelectedListener接口
            throw RuntimeException("$context 必须实现 OnItemSelectedListener")
        }

    }

    // 当Fragment与Activity解除关联时调用
    override fun onDetach() {
        super.onDetach()
        // 将listener置为null，避免内存泄漏
        listener = null
    }
}